﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

using MySql.Data.MySqlClient;

namespace MakeIT.MiraPark.Negocios
{
    public static partial class ModelBO
    {

        public static FormaPagamentoVO getFormaPagamento(int idFormaPagamento)
        {
            List<FormaPagamentoVO> listaFormaPagamentoVo = getFormaPagamentos(idFormaPagamento);
            if (listaFormaPagamentoVo != null && listaFormaPagamentoVo.Count > 0)
                return listaFormaPagamentoVo[0];
            else
                return null;
        }

        public static List<FormaPagamentoVO> getFormaPagamentos()
        {
            return getFormaPagamentos(null);
        }

        public static List<FormaPagamentoVO> getFormaPagamentos(int? idFormaPagamento)
        {
            string where = "WHERE ";
            StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT IdFormaPagamento, FormaPagamento, Ordem ");
            query.AppendLine("FROM formapagamento ");
            if (idFormaPagamento != null)
            {
                query.AppendLine(where + "IdFormaPagamento=?IdFormaPagamento ");
                where = " AND ";
            }
            query.AppendLine("ORDER BY Ordem, FormaPagamento ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            if (idFormaPagamento != null) cmd.Parameters.AddWithValue("IdFormaPagamento", idFormaPagamento);

            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                List<FormaPagamentoVO> listFormaPagamento = new List<FormaPagamentoVO>();

                while (reader.Read())
                {
                    FormaPagamentoVO formaPagamentoVO = FormaPagamentoVO.CreateFormaPagamentoVO();
                    formaPagamentoVO.idFormaPagamento = reader.GetInt32("IdFormaPagamento");
                    formaPagamentoVO.formaPagamento = reader.GetString("FormaPagamento");
                    formaPagamentoVO.ordem = reader.GetInt32("Ordem");

                    listFormaPagamento.Add(formaPagamentoVO);
                }
                reader.Close();
                return listFormaPagamento;
            }
            catch (Exception ex){ throw ex; }
            finally { cmd.Connection.Close(); }
        }

        public static void setFormaPagamento(FormaPagamentoVO formaPagamentoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("UPDATE formapagamento ");
            query.AppendLine("SET FormaPagamento=?FormaPagamento, Ordem=?Ordem ");
            query.AppendLine("WHERE IdFormaPagamento=?IdFormaPagamento ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdFormaPagamento", formaPagamentoVO.idFormaPagamento);
            cmd.Parameters.AddWithValue("?FormaPagamento", formaPagamentoVO.formaPagamento);
            cmd.Parameters.AddWithValue("?Ordem", formaPagamentoVO.ordem);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static long newFormaPagamento(FormaPagamentoVO formaPagamentoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("INSERT INTO formapagamento ");
            query.AppendLine("SET FormaPagamento=?FormaPagamento, Ordem=?Ordem ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?FormaPagamento", formaPagamentoVO.formaPagamento);
            cmd.Parameters.AddWithValue("?Ordem", formaPagamentoVO.ordem);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
                return cmd.LastInsertedId;
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void delFormaPagamento(FormaPagamentoVO formaPagamentoVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("DELETE FROM formapagamento ");
            query.AppendLine("WHERE IdFormaPagamento=?IdFormaPagamento ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdFormaPagamento", formaPagamentoVO.idFormaPagamento);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static bool readyToDeleteFormaPagamento(int idFormaPagamento)
        {
            int contagem = 0;

            MySqlDataReader reader = null;
            StringBuilder query = new StringBuilder();
            MySqlCommand cmd = getConnection();
            cmd.Connection.Open();

            try
            {

                query.AppendLine("SELECT count(*) contagem FROM pagamento WHERE IdFormaPagamento=?IdFormaPagamento ");
                cmd.CommandText = query.ToString();
                cmd.Parameters.AddWithValue("?IdFormaPagamento", idFormaPagamento);
                reader = cmd.ExecuteReader();
                reader.Read();
                contagem = reader.GetInt32("contagem");
                reader.Close();

                query = new StringBuilder();
                query.AppendLine("SELECT count(*) contagem FROM recebimento WHERE IdFormaPagamento=?IdFormaPagamento ");
                cmd.CommandText = query.ToString();
                reader = cmd.ExecuteReader();
                reader.Read();
                contagem += reader.GetInt32("contagem");
                reader.Close();


            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

            return contagem == 0;

        }
    }
}
